/*
package cn.maidouya.hrm.service.impl;

import cn.maidouya.hrm.constant.CourseConstant;
import cn.maidouya.hrm.domain.CourseType;
import cn.maidouya.hrm.mapper.CourseTypeMapper;
import cn.maidouya.hrm.service.ICourseTypeService;
import cn.maidouya.hrm.util.AjaxResult;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

*/
/**
 * <p>
 * 课程目录 服务实现类
 * </p>
 *
 * @author mdoya
 * @since 2021-04-29
 *//*

//@Service
public class CourseTypeServiceImpl_原生的_Redis extends ServiceImpl<CourseTypeMapper, CourseType> implements ICourseTypeService {
    @Autowired
    private CourseTypeMapper typeMapper;
    @Autowired
    private RedisTemplate redisTemplate;
    @Override
    public AjaxResult treeData() {
        // 方法一：嵌套SQL效率低
        // List<CourseType> data = typeMapper.treeData();
        // 方法二：循环思想 封装成方法
        List<CourseType> data = new ArrayList<>();
        Object obj = redisTemplate.opsForValue().get(CourseConstant.COURSE_TYPE_KEY);
        if (obj != null){
            data= (List<CourseType>)obj;
            System.err.println("缓存");
        } else {
            data = loadByData();
            redisTemplate.opsForValue().set(CourseConstant.COURSE_TYPE_KEY,data);
            System.err.println("数据库");
        }
    // 统一用resultobj给到前端
        return AjaxResult.me().setResultObj(data);
    }

    private List<CourseType> loadByData() {
        // 保存集合数据
        List<CourseType> list = new ArrayList<>();
       // 通过工具类查询所有数据  没有查询添加给默认null  否则会空指针异常
        List<CourseType> types = typeMapper.selectList(null);
        // 保存查询所有上下级关系id
        Map<Long, CourseType> map = new HashMap<>();
        // 遍历所有数据，保存上下级关系到map中
        types.stream().forEach(type->{
            map.put(type.getId(),type);
        });
        types.stream().forEach(courseType->{
            Long pid = courseType.getPid();
            if (pid == 0){
                // 保存一级
            list.add(courseType);
            }else {
                // 保存二级
                CourseType parent = map.get(pid);
                parent.getChildren().add(courseType);
            }
        });
        return list;
    }

    @Override
    public boolean deleteById(Serializable id) {
        boolean delete = super.deleteById(id);
        redisTemplate.delete(CourseConstant.COURSE_TYPE_KEY);
        return delete;
    }

    @Override
    public boolean insert(CourseType entity) {
        boolean insert = super.insert(entity);
        redisTemplate.delete(CourseConstant.COURSE_TYPE_KEY);
        return insert;
    }

    @Override
    public boolean updateById(CourseType entity) {
        boolean update = super.updateById(entity);
        redisTemplate.delete(CourseConstant.COURSE_TYPE_KEY);
        return update;
    }
}
*/
